import router from '.'
// import { addDynamicRoute } from '.'
import store from '@/store'

import nprogress from 'nprogress'
import 'nprogress/nprogress.css'

import { getJwtFromCookie } from '@/utils/jwt'

// 是否显示环形进度动画，默认 true
nprogress.configure({
  showSpinner: false,
})

// 定义直接放行的白名单
const whiteList = ['/login', '/logout']

// 路由前置守卫，每次路由跳转的时候都要执行
// eslint-disable-next-line
router.beforeEach(async (to, from, next) => {
  nprogress.start()
  // 设置页面的 title
  document.title = getPageTitle(to.meta.title)

  const pathTo = to.path
  // 1、白名单中的页面直接放行
  if (whiteList.indexOf(pathTo) !== -1) {
    next()
    return
  }

  // 2、从cookie中读取jwt，如果cookie中不存在jwt，直接跳登录页
  const jwt = getJwtFromCookie()
  if (!jwt || jwt === '') {
    next(`/login`)
    return
  }

  // 3、有jwt，不在白名单，已生成动态路由，放行
  let storeRoutes = store.getters.accessedRoutesDynamic
  if (storeRoutes && storeRoutes.length > 0) {
    next()
    // next({ ...to, replace: true })
    return
  }

  // 4、未生成动态路由，刷新后会丢失动态路由，在这里重新生成
  const accessedRoutesDynamic = await store.dispatch('sys_router/setRoutesDynamic')
  storeRoutes = store.getters.accessedRoutesDynamic
  // 定义一个用来做判断用的临时变量
  const aryRoute = Array.from(accessedRoutesDynamic)
  if (aryRoute && aryRoute.length > 0) {
    // addDynamicRoute(aryRoute)
    accessedRoutesDynamic.forEach((item) => {
      // if (!router.hasRoute(item.getRoutes.name)) {
      router.addRoute(item)
      // }
    })
    // next()
    next({ ...to, replace: true })
  } else {
    // 路由数据有错误，跳到登录页
    next(`/login`)
  }
})

router.afterEach(() => {
  nprogress.done()
})

function getPageTitle(pageTitle) {
  const title = '信州区（数字）图书馆后台管理系统'
  if (pageTitle) {
    return `${pageTitle} - ${title}`
  }
  return `${title}`
}
